﻿IF EXISTS (SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = 'OTEntregaClose')
	BEGIN
		DROP  Procedure  OTEntregaClose
	END
GO


CREATE PROCEDURE OTEntregaClose 	
	(	
		@empresaId AS INT,
		@entregaId AS INT,
		@usuarioId AS VARCHAR(30)	
	)	
AS
BEGIN	
	SET NOCOUNT ON

	DECLARE @costoTotal AS DECIMAL(12,2)	
	DECLARE @costoUnitario AS DECIMAL(12,2)
	DECLARE @unidadesProducidas AS DECIMAL(12,2)
	DECLARE @articuloId AS VARCHAR(13)
	DECLARE @sucursalId AS INT
	DECLARE @bodegaId AS INT	
	DECLARE @OTId AS INT
	DECLARE @numeroOT AS VARCHAR(30)
	
	DECLARE @fechaActual AS DATETIME
	SET @fechaActual = GETDATE()

	SELECT	@OTId = OTId, @unidadesProducidas = UnidadesProducidas, @articuloId = ArticuloId,
			@numeroOT = numeroOT
	FROM Lit_OTEntrega e
	INNER JOIN Lit_OT o ON e.OTId = o.Id
	WHERE e.Id = @entregaId

	-- Actualiza el estado de la Entrega
	UPDATE Lit_OTEntrega
	SET		EstadoId = 3,
			FechaFinal = @fechaActual
	WHERE Id = @entregaId
	
	-- Si no hay mas entregas con estados de "Abierta" o "En Proceso" entonces cierra la OT
	IF NOT EXISTS(SELECT 1 FROM Lit_OTEntrega WHERE OTId = @OTId AND EstadoId < 3)
	BEGIN
		UPDATE Lit_OT
		SET		EstadoId = 3,
				FechaFinal = @fechaActual
		WHERE Id = @OTId	
	END

	-- Extrae costos del producto
	EXEC OTEntregaCalculaCosto @entregaId, @CostoTotal OUT	
	SET @CostoUnitario = (@CostoTotal / @UnidadesProducidas)
		
	-- Extrae Sucursal y Bodega del producto terminado de acuerdo a la tabla de parametros
	SELECT @sucursalId = SucursalId, @bodegaId = BodegaProductoTerminado 
	FROM lit_parametrosbodega
	WHERE EmpresaId = @empresaId
		
	-- Actualiza los costos
	--EXEC ArticuloActualizaInventario @empresaId, @articuloId, @unidadesProducidas, @CostoUnitario
	
	-- Actualiza la existencia y genera Movimiento de ajuste por entrada	
    --EXEC Movimiento_Aplica_Por_OT @empresaId, @sucursalId, @bodegaId, @articuloId, @unidadesProducidas, @CostoUnitario, @numeroOT, @usuarioId
	
	SET NOCOUNT OFF
END
GO   